<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        ul {
            width: 300px;
            height: 1000px;
            background-color: skyblue;
        }
        li {
            width: 100px;
            height: 100px;
            background-color: violet;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <button>添加一个 li</button>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
        /**
         * 2-1 循环绑定到 li
         * 2-2 把 li 的事件都绑定给父级元素 比如 ul
         * 事件目标 target
         * if () {}
         * 元素节点.nodeName : 大写标签名
         * 优点: 
         * 减少元素的事件绑定 
         * 减少dom操作，提高性能 
         * 对于新添加进来的元素也可以执行事件，不需要重新绑定
         * 注意:
         * 事件委托要委托给一个同级的结构父级
         * 注意在父级的事件处理函数里面用事件目标去判断
         * 事件目标的兼容处理
         * 如果判断的是 nodeName 或者 tagName，注意是大写标签名
        */
        var lis = document.querySelectorAll('li')
        // lis.forEach(function(item) {
        //     item.onclick = function () {
        //         console.log(item)
        //     }
        // })
        var ul = document.querySelector('ul')
        var btn = document.querySelector('button')
        btn.onclick = function() {
            var li = document.createElement('li')
            li.innerHTML = '新来的'
            ul.appendChild(li)
        }
        ul.onclick = function (e) {
            e = e || window.event
            var target = e.target || e.srcElement
            // console.log(target)
            if (target.nodeName === 'LI') {
                console.log('你点击的是 li', target)
            } else if (target.nodeName === 'UL') {
                console.log('你点击的是 ul', target)
            }
        }
    </script>
</body>
</html>